/**
 * PPT转换模块类型定义
 */

export interface PptConversionResult {
  success: boolean;
  outputPath: string;
  size: number;
  message: string;
  slideCount?: number;
}

export interface PptConversionError {
  success: false;
  error: Error;
}

export interface PptOptions {
  /** PPT标题 */
  title?: string;
  /** PPT作者 */
  author?: string;
  /** PPT主题配色 */
  theme?: 'default' | 'business' | 'modern' | 'minimal';
  /** 幻灯片尺寸 */
  size?: 'standard' | 'widescreen';
  /** 字体大小 */
  fontSize?: {
    title?: number;
    content?: number;
  };
  /** 是否包含页码 */
  includePageNumbers?: boolean;
}

export interface MarkdownToPptOptions extends PptOptions {
  /** 是否为每个H1创建新幻灯片 */
  h1AsNewSlide?: boolean;
  /** 是否为每个H2创建新幻灯片 */
  h2AsNewSlide?: boolean;
  /** 图片下载超时时间（毫秒） */
  imageDownloadTimeout?: number;
}

export interface JsonToPptOptions extends PptOptions {
  /** 模板名称 */
  templateName?: string;
}

export interface PptTemplate {
  /** 模板名称 */
  name: string;
  /** 模板描述 */
  description?: string;
  /** 幻灯片定义 */
  slides: SlideTemplate[];
  /** 全局样式设置 */
  styles?: {
    backgroundColor?: string;
    textColor?: string;
    titleColor?: string;
    gradientBackground?: {
      colors: string[];
      transparencies?: number[];
    };
  };
  /** 装饰元素 */
  decorations?: {
    leftAccent?: {
      color: string;
      width: number | string;
    };
    headerOverlay?: {
      color: string;
      transparency: number;
      height: number | string;
    };
    cornerElements?: {
      color: string;
      transparency: number;
    }[];
  };
}

export interface SlideTemplate {
  /** 幻灯片标题 */
  title: string;
  /** 幻灯片类型 */
  type: 'title' | 'content' | 'section' | 'image' | 'table';
  /** 占位符配置 */
  placeholders?: Record<string, PlaceholderConfig>;
  /** 布局配置 */
  layout?: {
    titlePosition?: 'top' | 'center';
    contentAlignment?: 'left' | 'center' | 'right';
  };
}

export interface PlaceholderConfig {
  /** 占位符类型 */
  type: 'text' | 'list' | 'image' | 'table' | 'shape' | 'chart';
  /** 位置配置 */
  position: {
    x: number | string;
    y: number | string;
    w: number | string;
    h: number | string;
  };
  /** 样式配置 */
  style?: {
    fontSize?: number;
    color?: string;
    bold?: boolean;
    italic?: boolean;
    // 图表样式
    title?: string;
    titleColor?: string;
    chartArea?: any;
    plotArea?: any;
    showLegend?: boolean;
    legendPos?: string;
    catAxisLabelColor?: string;
    valAxisLabelColor?: string;
    dataLabelColor?: string;
    showValue?: boolean;
    showPercent?: boolean;
    lineSize?: number;
  };
  /** 形状配置 (仅当 type='shape' 时使用) */
  shape?: {
    type: string;  // 'RECTANGLE' | 'OVAL' | 'HEXAGON' 等
    fill?: {
      color: string;
      transparency?: number;
    };
    line?: {
      color?: string;
      width?: number;
    };
  };
  /** 图表类型 (仅当 type='chart' 时使用) */
  chartType?: 'bar' | 'pie' | 'line' | 'area' | 'scatter' | 'doughnut' | 'bubble' | 'radar';
}

export interface PptConvertParams {
  /** 输出文件路径 */
  outputPath: string;
  /** PPT选项 */
  options?: PptOptions;
}

export interface MarkdownToPptParams extends PptConvertParams {
  /** Markdown内容 */
  markdown: string;
  /** Markdown转换选项 */
  options?: MarkdownToPptOptions;
}

export interface JsonToPptParams extends PptConvertParams {
  /** JSON数据 */
  data: any[];
  /** 模板名称 */
  templateName: string;
  /** JSON转换选项 */
  options?: JsonToPptOptions;
}

export interface MarkdownFileToPptParams extends PptConvertParams {
  /** Markdown文件路径 */
  filePath: string;
  /** Markdown转换选项 */
  options?: MarkdownToPptOptions;
}

export interface GeneratePptFromTemplateParams extends PptConvertParams {
  /** 模板名称 */
  templateName: string;
  /** 数据 */
  data: any[];
  /** 模板选项 */
  options?: JsonToPptOptions;
}
